package com.xb.cloud.usercenter.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.xb.cloud.common.util.BeanUtils;
import com.xb.cloud.gateway.client.ReturnCodes;
import com.xb.cloud.gateway.client.ReturnUtils;
import com.xb.cloud.gateway.client.RtnInfo;
import com.xb.cloud.product.merchant.service.client.ProductSkuService;
import com.xb.cloud.service.client.ServiceReturnInfo;
import com.xb.cloud.service.client.ServiceReturnUtils;
import com.xb.cloud.user.service.client.EndUserFavoriteSkuService;
import com.xb.cloud.user.service.client.bo.EndUserFavoriteSkuBo;
import com.xb.cloud.usercenter.client.vo.FavoriteSkuVo;
import com.xb.cloud.usercenter.service.UserFavoriteProductSkuService;

@Service
public class UserFavoriteProductSkuServiceImpl implements UserFavoriteProductSkuService {

	@Resource
	EndUserFavoriteSkuService skuService;

	@Resource
	ProductSkuService productSku;

	@Override
	public RtnInfo addFavoriteSku(FavoriteSkuVo favoriteSkuVo) {
		EndUserFavoriteSkuBo favoriteSkuBo = BeanUtils.newAndCopyProperties(EndUserFavoriteSkuBo.class, favoriteSkuVo);
		favoriteSkuBo.setSkuId(favoriteSkuVo.getProductSkuId());// 名字取得不一样，手动赋值

		// 先判断是否为已收藏，如果是，返回error
		ServiceReturnInfo isFollowed = skuService.isFavoriteSku(favoriteSkuBo);
		if ((boolean) isFollowed.getData() == true)
			return ReturnUtils.error(ReturnCodes.PRODUCT_SKU_IS_FOLLOWED);

		// 添加收藏
		ServiceReturnInfo result = skuService.addFavoriteSku(favoriteSkuBo);
		if (ServiceReturnUtils.isError(result))
			return ReturnUtils.error(result.getCode(), result.getMessage(), result.getDetailMessage());
		return ReturnUtils.success();
	}

	@Override
	public RtnInfo cancelFavoriteSku(FavoriteSkuVo favoriteSkuVo) {
		EndUserFavoriteSkuBo favoriteSkuBo = BeanUtils.newAndCopyProperties(EndUserFavoriteSkuBo.class, favoriteSkuVo);
		favoriteSkuBo.setSkuId(favoriteSkuVo.getProductSkuId());// 名字取得不一样，手动赋值

		// 先判断是否为已收藏，如果不是，返回error
		ServiceReturnInfo isFollowed = skuService.isFavoriteSku(favoriteSkuBo);
		if ((boolean) isFollowed.getData() == false)
			return ReturnUtils.error(ReturnCodes.PRODUCT_SKU_IS_NOT_FOLLOWED);

		ServiceReturnInfo result = skuService.cancelFavoriteSku(favoriteSkuBo);
		if (ServiceReturnUtils.isError(result))
			return ReturnUtils.error(result.getCode(), result.getMessage(), result.getDetailMessage());
		return ReturnUtils.success();
	}

	@Override
	public RtnInfo isFollowed(FavoriteSkuVo favoriteSkuVo) {
		EndUserFavoriteSkuBo favoriteSkuBo = BeanUtils.newAndCopyProperties(EndUserFavoriteSkuBo.class, favoriteSkuVo);
		favoriteSkuBo.setSkuId(favoriteSkuVo.getProductSkuId());// 名字取得不一样，手动赋值

		ServiceReturnInfo result = skuService.isFavoriteSku(favoriteSkuBo);
		if (ServiceReturnUtils.isError(result))
			return ReturnUtils.error(result.getCode(), result.getMessage(), result.getDetailMessage());
		return ReturnUtils.success(result.getData());
	}

	@Override
	@SuppressWarnings("unchecked")
	public RtnInfo getFavoriteShopList(FavoriteSkuVo favoriteSkuVo) {
		EndUserFavoriteSkuBo favoriteSkuBo = BeanUtils.newAndCopyProperties(EndUserFavoriteSkuBo.class, favoriteSkuVo);
		favoriteSkuBo.setStartPage(favoriteSkuVo.getPageNum());

		// 获取收藏skuId列表
		List<Long> skuIds = null;
		ServiceReturnInfo serviceRtnInfoSkuIds = skuService.list(favoriteSkuBo);
		// 取出id
		skuIds = (List<Long>) serviceRtnInfoSkuIds.getData();
		if (skuIds == null)
			return ReturnUtils.error(ReturnCodes.SYSTEM_EXCEPTION);
		else if (skuIds.size() == 0) {
			// 如果长度为零，提前返回。
			return ReturnUtils.success(new Byte[0]);
		}

		// 根据skuId列表查找sku的详细信息
		ServiceReturnInfo result = productSku.getSkuListByIds(skuIds);
		if (ServiceReturnUtils.isError(result))
			return ReturnUtils.error(result.getCode(), result.getMessage(), result.getDetailMessage());
		return ReturnUtils.success(result.getData());
	}

}
